大家好,今天是最後一天,今天跟大家介紹shared_preferences
,可以把一些簡單的設定的東西存在裡面
在pubspec.yaml新增shared_preferences: ^0.5.12+2
dependencies:
shared_preferences: ^0.5.12+2
import,我是用在SelectUserPage這一頁中
import 'package:shared_preferences/shared_preferences.dart';
每次使用SharedPreferences都是使用SharedPreferences.getInstance()
Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
Future<List<User>> _users;
Future<void> mockNetworkData() async {
print('future work');
return Future.delayed(Duration(seconds: 4), () async {
final SharedPreferences prefs = await _prefs;
//假設雲端傳來的資料轉化後的List是這樣4位
List<User> users = [
User("Player1", "assets/icons/icon_user.jpg"),
User("Player2", "assets/icons/icon_user.jpg"),
User("Player3", "assets/icons/icon_user.jpg"),
User("Player4", "assets/icons/icon_user.jpg"),
];
//直接把整個List變成json
String s = json.encode(users);
setState(() {
//存入資料使用setString(key,value)然後回傳users
_users = prefs.setString('users', s).then((bool success) {
return users;
});
});
});
}
@override
void initState() {
_users = _prefs.then((SharedPreferences prefs) {
//取出字串資料使用getString
String _string = prefs.getString('users') ?? '';
List list = json.decode(_string);
//取出的時候並非直接是User的資料格式,所以這邊針對list裡面每個item轉化成User
List<User> users = list.map((e) => User.fromJson(e)).toList();
return users;
});
super.initState();
}
在FutureBuilder中使用,future為_users
FutureBuilder<List<User>>(
future: _users,
builder: (context, snapshot) {
print("snapshot: $snapshot");
if (snapshot.connectionState == ConnectionState.done) {
return GridView.count(
shrinkWrap: true,
crossAxisCount: 2,
crossAxisSpacing: 16.0,
mainAxisSpacing: 16.0,
childAspectRatio: 10 / 12,
children: List.generate(snapshot.data.length,
(index) => _buildUser(snapshot.data[index])),
);
}
return GridView.count(
shrinkWrap: true,
crossAxisCount: 2,
crossAxisSpacing: 16.0,
mainAxisSpacing: 16.0,
childAspectRatio: 10 / 12,
children: List.generate(4, (index) => _buildWaiting()),
);
}),
終於完成30天的挑戰,這30天比較像是我的學習筆記,對我自己來說,這30天幫助我釐清很多觀念,畢竟為了做出這個clone,很多地方都要再看一次資料。前半的篇章還算可以,後半開始發現很多地方不是很熟,也激勵自己去補足自己不會的東西,希望這些學習經驗也可以幫助到別人,歡迎大家多多指教,感謝!
最近Flutter更新到3.0版本了,我也更新了這隻程式。這段時間陸續有看到有人追蹤這個系列文章,真的很感謝大家。我在每篇文章都附上source code連結有興趣的朋友可以看看。
GitHub連結: flutter-netflix-clone